﻿$(document).ready(function () {
    if (typeof (VOFFICE) == "undefined") {
        // ReSharper disable AssignToImplicitGlobalInFunctionScope
        VOFFICE = {};
        // ReSharper restore AssignToImplicitGlobalInFunctionScope
    }

    VOFFICE.DocumentProperty = (function () {
        var methods = {};
        methods.PageSize = 50;
        methods.DocPropertyGrid = null;
        methods.DocTypeList = null;
        methods.Collection = new DocumentCollection();
        methods.CustomValidate = {
            errorLabelContainer: "#docproperty-form-error",
            rules: {
                Name: { required: true }
            }
        };
        methods.DocPropertyForm = null;
        var $table = $('#list-details');
        var $pager = $('#pager');
        methods.dialog = $('#document-dialog').dialog({
            autoOpen: false,
            show: "fade", //fix ie bug
            hide: "fade",
            modal: true,
            height: 'auto',
            width: 600,
            open: function (event, ui) {
                $('.ui-dialog-titlebar', ui.dialog || ui).hide();
            }
        });

        //Tìm kiếm dữ liệu.
        var $key = $('#ipt-search');
        var $buttonsearch = $('#btn-search');
        methods.busy = false;
        var search = function (event) {
            if (!!$key.val()) {
                if (!methods.busy) {
                    methods.busy = true;
                    $pager.fadeOut("fast");
                    SaveIndicator.indicate($.get('/documentproperty/search_docpro', { key: $key.val(), nocache: (new Date()).toJSON() }, function (data) {
                        methods.busy = false;
                        if (!!data && data.Status == true) {
                            VH.DateUtility.FixDates(data);
                            var list = new DocumentCollection();
                            if (data.Result.length > 0) {
                                _.each(data.Result, function (item) {
                                    var doc = new DocumentProperty({
                                        'id': item.Id,
                                        'Name': item.Name,
                                        'TypeName': item.TypeName,
                                        'Type': item.Type,
                                        'IsActive': item.IsActive,
                                        'IsDefault': item.IsDefault,
                                        'CreatedAt': item.CreatedAt,
                                        'UpdatedAt': item.UpdatedAt
                                    });
                                    list.push(doc);
                                });
                                $table.find('tbody').remove();
                                methods.Collection = list;
                                methods.DocPropertyGrid = new DocPropertyGrid({ collection: list });
                                $table.append(methods.DocPropertyGrid.render().el);
                            } else {
                                alert("Không tìm thấy dữ liệu");
                            }
                        }
                    }));
                }
            } else {
                $key.focus();
            }
        };
        /*
        Lấy hết sổ văn bản theo phân trang
        */
        var getPagedBook = function (pageIndex) {
            pageIndex = parseFloat(pageIndex) - 1;
            SaveIndicator.indicate($.get('/documentproperty/get_all_record_have_property', { 'pageIndex': pageIndex, 'pageSize': methods.PageSize, nocache: (new Date()).toJSON() }, function (data) {

                if (!!data && data.Status == true) {
                    if (!!data.Result.Item && data.Result.Item.length > 0) {
                        VH.DateUtility.FixDates(data);
                        $table.find('tbody').remove();
                        var list = new DocumentCollection();
                        _.each(data.Result.Item, function (item) {
                            var docProperty = new DocumentProperty({
                                'id': item.Id,
                                'Name': item.Name,
                                'Type': item.Type,
                                'IsActive': item.IsActive,
                                'CreatedAt': item.CreatedAt,
                                'IsDefault': item.IsDefault,
                                'UpdatedAt': item.UpdatedAt,
                                'CreatorId': item.CreatorId,
                                'TypeName': item.TypeName
                            });
                            list.push(docProperty);
                        });
                        methods.Collection = list;
                        methods.DocPropertyGrid = new DocPropertyGrid({ collection: list });
                        $table.append(methods.DocPropertyGrid.render().el);

                        //phân trang
                        paging(1 + data.Result.PageIndex, data.Result.PageCount);
                    } else {

                    }
                }
            }));
        };

        var addNew = function () {
            /// <summary>
            ///	Hiện dialog để thêm mới thuộc tính
            /// </summary>
            var addForm = new DocPropertyForm({ model: new DocumentProperty() });
            addForm.render();
        };

        methods.edit = function (model) {
            /// <summary>
            ///	Hiển thị dialog để sửa thuộc tính
            /// </summary>
            var editForm = new DocPropertyForm({ model: model });
            editForm.render();
        };
        /*
        Hàm cập nhập dữ liệu trên trang sau khi save
        */
        methods.updateGrid = function (model, isNew) {
            /// <summary>
            /// Cập nhập lại grid dữ liệu
            /// </summary>
            $table.fadeIn("fast");
            if (isNew) {
                methods.Collection.add(model, { at: 0 });
            }
            methods.dialog.dialog('close');
        };
        /*Hàm đóng dialog*/
        methods.closeDialog = function () {
            /// <summary>
            /// Hàm đóng dialog
            /// </summary>
            methods.dialog.dialog('close');
        };

        methods.recallValidate = function () {
            $('#docproperty-form').validate();
        };

        /* 
        Lay cac gia tri key - value de dua vao form tao va sua
        */
        var getKeyValue = function () {
            if (!methods.DocTypeList) {
                $.get('/keyvalue/get_doc_properties', { nocache: (new Date()).toJSON() }, function (data) {
                    if (!!data && data.Status == true) {
                        methods.DocTypeList = data.Result;
                    }
                });
            }
        };

        /*
        Tạo phân trang
        */
        var paging = function (currentPage, pageCount) {
            $pager.pager({ pagenumber: currentPage, pagecount: pageCount, buttonClickCallback: getPagedBook });
        };

        // quy ước về hàm khởi tạo các action trên form động
        methods.init = function () {
            $('#add-new').live('click', addNew);
            $buttonsearch.live('click', search);
            getPagedBook(1);
            getKeyValue();
        };
        return methods;
    })(VOFFICE.DocumentProperty);

    //gọi hàm khởi tạo
    VOFFICE.DocumentProperty.init();
});

/*
View để thêm mới hay chỉnh sửa văn bản
*/
window.DocPropertyForm = Backbone.View.extend({

    initialize: function () {
        //        $('#docproperty-form').live('submit', this.submitBook, this);
        //bind để tự động cập nhập lại dữ liệu khi các field của model thay đổi
        this.model.bind("change", this.render, this);
        this.model.bind("destroy", this.close, this);
    },

    /* 
    cập nhập hoặc thêm mới sổ văn bản 
    //    */
    //    submitBook: function (event) {
    //        event.preventDefault();
    //        //bug fixes
    //        var self = VOFFICE.DocumentProperty.DocPropertyForm;
    //        if (!self) {
    //            VOFFICE.DocumentProperty.closeDialog();
    //        }
    //        var isNew = self.model.isNew();
    //        //tao moi hay cap nhap du lieu
    //        SaveIndicator.indicate(self.model.save({
    //            'Name': $('#Name').val(),
    //            'Type': $('#Type').val(),
    //            'IsActive': $('#IsActive').is(':checked'),
    //            'IsDefault': $('#IsDefault').is(':checked'),
    //            'TypeName': $("#Type option:selected").text(),
    //            'UpdatedAt': $('#UpdatedAt').text(),
    //            'CreatedAt': $('#CreatedAt').text()
    //        }, {
    //            success: function (data) {
    //                if (!!data && data.get('Status') == true) {
    //                    VOFFICE.DocumentProperty.updateGrid(self.model, isNew);
    //                }
    //            },
    //            error: function (data) {
    //                VOFFICE.DocumentProperty.closeDialog();
    //            },
    //            complete: function () {
    //                self.close();
    //                return false;
    //            }
    //        }));
    //    },
    

    //chú ý khi render ở đây thì không render ở trong 2 hàm thêm mới và cập nhật nữa mà chỉ gọi hàm render mà thôi.
    render: function () {
        var self = this;
        this.template = _.template($('#docproperty-form-template').html());
        $(this.el).html(this.template({ model: this.model.toJSON() }));
        VOFFICE.DocumentProperty.dialog.html($(this.el).html(this.template({ model: this.model.toJSON() })));
        var isNew = this.model.get('id') == 0;
        if (!isNew) {
            VOFFICE.DocumentProperty.dialog.dialog('option', 'title', jsResources.lang.ManageDocProperty_Update);
        } else {
            VOFFICE.DocumentProperty.dialog.dialog('option', 'title', jsResources.lang.ManageDocProperty_Add);
        }
        var dialogCloseButtons = jsResources.lang.ButtonClose;
        var dialogUpdateButtons = jsResources.lang.Update;
        var dialogButtons = {};
        dialogButtons[dialogUpdateButtons] = function () {
            SaveIndicator.indicate(self.model.save({
                'Name': $('#Name').val(),
                'Type': $('#Type').val(),
                'IsActive': $('#IsActive').is(':checked'),
                'IsDefault': $('#IsDefault').is(':checked'),
                'TypeName': $("#Type option:selected").text(),
            }, {
                success: function (data) {
                        VOFFICE.DocumentProperty.updateGrid(self.model, isNew);
                },
                error: function (data) {
                    VOFFICE.DocumentProperty.closeDialog();
                },
                complete: function () {
                }
            }));
        };
        dialogButtons[dialogCloseButtons] = function () {
            $(this).dialog('close');
        };
        VOFFICE.DocumentProperty.dialog.dialog(
            {
                buttons: dialogButtons
            }
        );
        VOFFICE.DocumentProperty.dialog.dialog('open');
        return this;
    },

    close: function () {
        this.remove();
        this.unbind();
        this.model.unbind("change", this.render, this);
//        $('#docproperty-form').die('submit', this.submitBook, this);
    }
});
/*
Chứa một collection là list các book model
gọi đến DocPropertyGridItem để hiển thị dữ liệu
*/
window.DocPropertyGrid = Backbone.View.extend({
    tagName: 'tbody',
    render: function () {
        $(this.el).html('');
        var i = 1;
        _.each(this.collection.models, function (documentproperty) {
            documentproperty.set({ 'Order': i });
            $(this.el).append((new DocPropertyGridItem({ model: documentproperty })).render().el);
            i++;
        }, this);
        return this;
    },

    /* 
    Khi grid có thêm bản ghi thì cập nhập
    */
    initialize: function () {
        var self = this;
        this.collection.bind("add", function (documentproperty) {
            $(self.el).append(new DocPropertyGridItem({ model: documentproperty }).render().el);
        });
    }
});

/*
Từng item trong grid dữ liệu
Các item này tạo thành table chứa thông tin tất cả các book có trong hệ thống
*/
window.DocPropertyGridItem = Backbone.View.extend({
    tagName: 'tr',

    /*
    Bind để tự động cập nhập lại dữ liệu khi các field của model thay đổi
    */
    initialize: function () {
        this.model.bind("change", this.render, this);
        this.model.bind("destroy", this.close, this);
    },
    /*
    Các sự kiện trên một dòng trong grid 
    */
    events: {
        'click .grid-update': 'showDocUpdate',
        'click .grid-delete': 'deleteDocProperty',
        'change .cbxIsActive': 'activeDocProperty',
        'change .cbxIsDefault': 'defaultDocProperty'
    },

    /*
    Active hay InActive sổ văn bản
    */
    activeDocProperty: function (event) {
        var $target = $(event.currentTarget);
        var self = this;
        //luu du lieu
        SaveIndicator.indicate(self.model.save({ 'IsActive': $target.is(':checked'), 'modified': 'IsActive' }, function (data) {
            if (!data || data.Status == false) {
                alert("");
            }
        }));
    },

    defaultDocProperty: function (event) {
        /// <summary>
        ///	Chọn thuộc tính mặc định
        /// </summary>	
        var $target = $(event.currentTarget);
        var self = this;
        //luu du lieu
        SaveIndicator.indicate(self.model.save({ 'IsDefault': $target.is(':checked'), 'modified': 'IsDefault' }, function (data) {
            if (!data || data.Status == false) {
                alert("");
            }
        }));
    },

    /*
    Xóa văn bản 
    */
    // đã xóa thành công by anhtt67
    deleteDocProperty: function (event) {
        /// <summary>
        ///	Xóa thuộc tính của loại công văn
        /// </summary>
        var self = this;
        // lấy đa ngôn ngữ
        VH.ConfirmBox(jsResources.lang.ManageDocPropertyDeleteConfirm, jsResources.lang.Delete, jsResources.lang.Cancel,
            function () {
                //xoa du lieu
                SaveIndicator.indicate($.post('/documentproperty/delete_item', { id: self.model.get('id'), nocache: (new Date()).toJSON() }, function (data) {
                    if (!!data && data.Status == true) {
                        self.close();
                    } else {
                        alert("");
                    }
                }));
            },
            function () {
                return true;
            }
        );
    },

    /*
    Hiển thị màn hình để cập nhập sổ văn bản
    */
    showDocUpdate: function (event) {
        VOFFICE.DocumentProperty.edit(this.model);
    },

    /*
    Kết hợp template và model để hiển thị lên 1 dòng (tr)
    chứa thông tin của văn bản
    */
    render: function () {
        this.template = _.template($('#list-docproperty-item-template').html());
        $(this.el).html(this.template({ model: this.model.toJSON() }));
        return this;
    },
    close: function () {
        $(this.el).remove();
    }
});